package eventos.aceptar;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JOptionPane;

import logica.AtributoIdentificadorFaltanteException;
import logica.AtributoRepetidoException;
import logica.Entidad;
import logica.EntidadIdentificadoraFaltanteException;
import logica.EntidadRepetidaException;
import logica.IdExternoInexistenteException;
import logica.IdExternoRepetidoException;
import logica.IdentificadorVacioException;
import logica.SinNombreException;

import controlador.IObjDelModConRefExternaEntidad;

import vista.objetos.AtributoTipoNoSoportadoException;
import vista.objetos.EntidadGraficable;
import vista.objetos.GraficableException;
import vista.objetos.ProyectoGraficable;
import vista.paneles.NingunElementoSeleccionadoException;
import vista.paneles.TipoEvento;
import vista.ventanas.VentanaEntidad;


public class EventoAceptarEntidadNueva  extends MouseAdapter {
	
	private VentanaEntidad ventana;
	private IObjDelModConRefExternaEntidad controlador;
	
	public EventoAceptarEntidadNueva(VentanaEntidad ventana, IObjDelModConRefExternaEntidad controlador)
	{
		super();
		this.ventana = ventana;
		this.controlador = controlador;
	}
	
	public void mouseClicked(MouseEvent evento)
	{
		Entidad entidad = null;
		ProyectoGraficable proyecto = this.controlador.getProyectoActual();
		try 
		{
			entidad = this.ventana.getEntidad();
			
			this.controlador.verificarSiSePuedeAgregarObjeto(entidad);
					
			EntidadGraficable entidadGraficable = this.ventana.getTipoDeEntidad().crearEntidadGraficable(entidad, proyecto.getDiagramaActual(), proyecto.getConversor());
		
			this.ventana.setVisible(false);

			this.controlador.dibujarGraficableFlotante(entidadGraficable, TipoEvento.AGREGAR_GRAFICABLE_NUEVO);

			this.ventana = null;			
		}
		catch (SinNombreException e)
		{
			JOptionPane.showMessageDialog(this.ventana, "La entidad debe tener nombre.", "Entidad sin nombre", JOptionPane.ERROR_MESSAGE);
		} 
		catch (EntidadRepetidaException e)
		{
			JOptionPane.showMessageDialog(this.ventana, "Ya existe en el modelo una entidad con este nombre: " + entidad.getNombre(), "Entidad repetida", JOptionPane.ERROR_MESSAGE);
		} 
		catch (AtributoRepetidoException e) 
		{
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Atributo repetido", JOptionPane.ERROR_MESSAGE);
		} 
		catch (IdExternoRepetidoException e) 
		{
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Referencia externa repetida", JOptionPane.ERROR_MESSAGE);
		}
		catch (AtributoIdentificadorFaltanteException e) 
		{
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error en el identificador", JOptionPane.ERROR_MESSAGE);
		}
		catch (EntidadIdentificadoraFaltanteException e) 
		{
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error en el identificador", JOptionPane.ERROR_MESSAGE);
		}
		catch (IdExternoInexistenteException e) 
		{
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error al crear la Entidad", JOptionPane.ERROR_MESSAGE);
		} 
		catch (IdentificadorVacioException e) 
		{// se supone q no debería producirse con la interfaz gráfica actual
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error en el identificador", JOptionPane.ERROR_MESSAGE);
		}
		catch (AtributoTipoNoSoportadoException e)
		{// se supone q no debería producirse salvo q en la carga pasen cosas raras
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error al crear la Entidad Grafica", JOptionPane.ERROR_MESSAGE);
		}
		catch (NingunElementoSeleccionadoException e) 
		{// se supone q no debería producirse 
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		} 
		catch (GraficableException e) 
		{// se supone q no debería producirse 
			JOptionPane.showMessageDialog(this.ventana, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
		}
		
	}
}